package utils.json;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Test;

import play.Logger;
import play.db.jpa.Model;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import component.UserBis;

public class JSONUtils {
	/**
	 * 通过list获取json
	 * 
	 * @param list
	 * @return json数据，包含total
	 *         {"total":40,"data":[{"entityId":1,"id":1},{...},...]} 2015年10月26日
	 *         上午11:29:10
	 * @auth huan208050@vip.qq.com
	 */
	public static String getJsonStr(List list) {
		int total = list == null ? 0 : list.size();
		JSONObject json = new JSONObject();
		json.put("data", list);
		json.put("total", total);
		return JSON.toJSONString(json,
				SerializerFeature.DisableCircularReferenceDetect);
	}

	/**
	 * 通过实体获取json
	 * 
	 * @param model
	 * @return json数据，{"entityId":1,"id":1} 2015年10月26日 上午11:31:49
	 * @auth huan208050@vip.qq.com
	 */
	public static String getJsonStr(Model model) {
		return JSON.toJSONString(model);
	}
	/**
	 * @Title:        getJsonObj 
	 * @Description:  TODO(这里用一句话描述这个方法的作用) 
	 * @param:        @param obj
	 * @param:        @return    
	 * @return:       String    
	 * @throws 
	 * @author        caofan
	 * @Date          2015年11月23日 下午5:54:20
	 */
	public static String getJsonObj(Object obj){
		return JSON.toJSONString(obj);
	}
	/**
	 * json转List<Map<String,Object>>
	 * @Title:        jsonArr2List 
	 * @Description:  TODO(这里用一句话描述这个方法的作用) 
	 * @param:        @param arr    
	 * @return:       void    
	 * @throws 
	 * @author        caofan
	 * @Date          2015年11月23日 下午3:33:31
	 */
	public void jsonArr2List(JSONArray arr) {
		List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
		if(arr!=null){
			for (int i = 0; i < arr.size(); i++) {
				JSONObject obj = arr.getJSONObject(i);
				Map<String,Object> map = new HashMap<String, Object>();
				for (String key : obj.keySet()) {
					map.put(key,obj.get(key));
				}
				list.add(map);
			}
		}
		System.out.println(list);
	}
	
	public static String getMenuJson(String plat_id){
		JSONArray roleArr = JSONArray.parseArray(UserBis.currRights());
		JSONArray parentArr = new JSONArray();
		JSONArray childArr = new JSONArray();
		if(roleArr!=null&&roleArr.size()>0){
			for (int i = 0; i < roleArr.size(); i++) {
				JSONObject roleObj = roleArr.getJSONObject(i);
				JSONArray rightsArr = roleObj.getJSONArray("right_data");
				for (int j = 0; j < rightsArr.size(); j++) {
					JSONObject rightObj = rightsArr.getJSONObject(j);
					if (rightObj != null&&rightObj.getString("isMenu").equals("1")) {
						JSONObject newRightObj = new JSONObject();
						newRightObj.put("ids", rightObj.getString("id"));
						newRightObj.put("id", rightObj.getString("url"));
						newRightObj.put("value", rightObj.getString("name"));
						newRightObj.put("icon", rightObj.getString("icon"));
						newRightObj.put("sort_num", rightObj.getString("sort_num"));
						if (rightObj.getString("platId").equals(plat_id)
								&& rightObj.getString("isModle")
										.equals("1")) {
							parentArr.add(newRightObj);
						} else {
							newRightObj.put("parentId",
									rightObj.getString("parentId"));
							childArr.add(newRightObj);
						}
					}
				}
			}
		
			for (int i = 0; i < parentArr.size(); i++) {
				JSONObject parentObj = parentArr.getJSONObject(i);
				JSONArray childs = new JSONArray();
				for (int j = 0; j < childArr.size(); j++) {
					JSONObject childObj = childArr.getJSONObject(j);
					if (childObj.getString("parentId").equals(
							parentObj.getString("ids"))) {
						childs.add(childObj);
					}
				}
				parentObj.put("data", childs);
			}
			return parentArr.toJSONString();
		}else{
			return "";
		}
	}
}
